量化咖(lhk.ai)UI 设计梳理

本文以 lhk.ai 线上产物为唯一事实来源,逐层拆解其 UI 设计:先讲行为(用户如何与界面交互、页面如何被加载),再讲结构(界面由哪些组件与令牌构成),最后给出可直接复用的速查手册与逆向复刻操作手册。

事实来源:https://lhk.ai 的 HTML 外壳、/assets/css/index.JcVxZNbQ.css、/assets/js/index.DVIthQbW.js、/assets/js/LandingHome.Ce2MMH2o.js、/assets/css/LandingHome.Luxm4zym.css 等公开静态产物。文中所有色值、尺寸、层级均来自这些文件。

1. 概述

1.1 产品定位与技术栈

量化咖(英文 LHK Quant)是一个面向全球市场的量化交易 SaaS 平台,标语「让量化交易更简单」。产品覆盖行情研究、指标绘图、策略构建与回测、策略广场跟投、AI 自主实盘托管、数据中心与内容学习等完整链路,同时提供中英双语。

维度选型说明
前端框架Vue 3 + Vite单页应用(SPA),按路由懒加载页面 chunk
UI 组件库Element Plus被大量 CSS 变量覆盖定制,形成自有视觉
图标Tabler Icons (Vue)线性图标,头部与卡片统一使用
图表引擎ECharts / TradingView / lightweight-charts超级图表与数据中心看板
字体Inter(fontsource 自带)正文;数字使用等宽字体
国际化vue-i18n(zh / en)头部可切换语言,键值内嵌于主 bundle
主题CSS 变量 + data-app-theme默认暗色,可选亮色,localStorage 持久化
SPA(Single Page Application,单页应用)
首次加载 HTML 外壳与 JS bundle,后续页面切换由前端路由完成、按需拉取 chunk,不整页刷新。
Chunk(代码分块)
Vite 打包产物的最小懒加载单元,如 LandingHome.xxx.js、ChartWorkspace 等。

1.2 双设计体系(两套视觉语言并存)

lhk.ai 的 UI 并非单一风格,而是刻意分成两层,服务两类完全不同的场景:

维度营销 / 落地页体系应用 / 工作台体系
覆盖页面/ 首页、关于我们、政策页登录后所有功能页(图表、策略、数据中心、后台)
视觉基调黑白极简、编辑风、超大标题蓝色企业风、暗色优先、信息密度高
主色黑 #111214 / 白 #ffffff品牌蓝 #2446a3 / 强调蓝 #2563eb
头部landing-header 高 76px,滚动毛玻璃public-header 高 60px,带 Mega Menu
组件来源高度定制,几乎不直接用 Element 外观Element Plus + 自有 Dialog/Dropdown token
设计意图:营销层负责「品牌感与转化」,用大留白与克制动效建立专业信任;应用层负责「效率与密度」,用暗色与统一令牌降低长时间盯盘的视觉疲劳。

1.3 逆向方法(本文如何得出)

  1. 抓取 index.html:得到主题引导脚本、初始加载层结构、静态资源清单。
  2. 抓取 index.css:提取全部 :root 自定义属性(Design Token)与组件样式。
  3. 抓取 index.js:提取路由表、懒加载 chunk 映射、i18n 键值、组件类名。
  4. 抓取 LandingHome.* 与 LandingHome.css:还原落地页专属设计与独立令牌。

2. 行为图

行为图回答「系统做什么、用户怎么走」。顺序为:用例图(整体行为)→ 活动图(核心旅程)→ 时序图(加载与主题)→ 状态图(会话生命周期)。

2.1 用例图(整体行为)

PlantUML diagram
图 2-1 用例图:五类角色 × 量化咖 Web 应用的完整功能边界
Use Case Diagram(用例图)
UML 行为图之一,描述「参与者(Actor)」与「系统提供的能力」之间的关系,用来界定系统边界。
Mega Menu(超级菜单)
头部「所有功能」下拉面板,一次性平铺展示多组功能卡与快速入口,替代多级菜单。

2.2 活动图:核心用户旅程

从访客到达落地页,到注册、选择路径、最终把策略跑在实盘上,是产品的主干路径。下图用 fork 表达「逛行情 / 抄策略 / 自建策略」三条并行支线。

PlantUML diagram
图 2-2 活动图:从落地页到 AI 实盘托管的主流程

2.3 时序图:首屏加载与主题初始化

主题必须在首帧就正确,否则会「白闪」(FOUC)。因此主题读取被放在 HTML 头部的一段内联脚本中,先于任何 bundle 执行;随后 Vue 挂载、路由解析、懒加载页面 chunk、请求后端数据。

PlantUML diagram
图 2-3 时序图:从 HTTP 请求到页面渲染、再到主题切换的完整调用链
FOUC(Flash of Unstyled Content,样式闪烁)
页面先用默认样式渲染、随后被 JS/CSS 覆盖而产生的瞬间闪烁。量化咖用内联主题脚本 + 初始加载层规避。
localStorage
浏览器本地持久化存储。量化咖用键 lhk:app:theme:v2 记住用户主题选择。

2.4 状态图:会话与会员状态

PlantUML diagram
图 2-4 状态图:访客 → 登录 → 会员 → 退出的生命周期

3. 结构图

结构图回答「界面由什么组成」。顺序为:部署图(宏观运行环境)→ 组件图(应用与组件依赖)→ 包图(分层架构)→ 类图(设计系统对象模型),层层细化。

3.1 部署图

PlantUML diagram
图 3-1 部署图:浏览器运行时、静态资源服务器 / CDN、后端服务集群
Deployment Diagram(部署图)
UML 结构图之一,描述软件构件在物理/逻辑节点上的分布与通信关系。
CDN(Content Delivery Network,内容分发网络)
就近分发静态资源(JS/CSS/视频),降低首屏延迟。量化咖的 /assets/* 与 /media/* 即为此类资源。

3.2 组件图

PlantUML diagram
图 3-2 组件图:应用外壳、业务页面、基础组件、底层依赖四层

3.3 包图

PlantUML diagram
图 3-3 包图:Layout / Page / Component / Token / Foundation 五层
Atomic Design(原子化设计)
把界面拆为原子(Atom)→ 分子(Molecule)→ 有机体(Organism)→ 模板(Template)→ 页面(Page)的设计方法论。量化咖的 Component 层即对应原子与分子。

3.4 类图:设计系统对象模型

PlantUML diagram
图 3-4 类图:DesignToken / ThemeProfile / AppShell 及核心 UI 对象的属性与方法

4. 设计语言与 Design Token

量化咖通过 CSS 自定义属性(CSS Variables)实现真正的「令牌化」:颜色、字体、圆角、阴影、层级全部以变量表达,换肤与品牌调整只需改变量。

Design Token(设计令牌)
把设计决策(颜色、间距、字体等)抽象为与平台无关的命名变量,是设计系统与代码之间的契约。
CSS Variables(CSS 自定义属性)
以 --name: value 声明、var(--name) 引用的原生 CSS 能力,支持继承与运行时切换。

4.1 字体与字号

令牌值用途
--site-font-familyInter, "PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif全局正文
--site-number-font-family"JetBrains Mono", "SFMono-Regular", Consolas, monospace行情数字、代码
--frist-title23px(移动 20px)一级标题
--second-title16px(移动 15px)二级标题
--third-title14px三级标题 / 正文

4.2 颜色系统

应用体系令牌

令牌色值说明
--primary-color#2446a3品牌主色
--hover_color#3370ff悬停/高亮
--app-accent-blue#2563eb强调蓝(新)
--app-accent-blue-hover#1d4ed8强调蓝悬停
--app-selection-active-bg#eff6ff选中底色
--app-selection-active-text#2563eb选中文字

语义色(亮 / 暗两套)

语义亮色暗色
成功 Success#0f9f74#22ab94
警告 Warning#d97706#f0a54a
错误 Error#dc3545#f7525f
信息 Info#2563eb#5b8ff9
消息面板底色#ffffff#202328
消息文字#1f2937#f1f5f9

落地页体系令牌(独立命名空间)

令牌亮色暗色
--page-bg#ffffff#090a0c
--ink#111214#f1f2f3
--ink-strong#050607#ffffff
--muted#666b73#a4a8af
--button-bg / --button-text#111214 / #ffffff#f4f5f6 / #0b0c0e
--media-framelinear-gradient(118deg, #2f6cff 0%, #0a347f 100%)
Anticipated Contrast(对比度)
文本与背景的明度差。暗色底 #0d0f12 配 #f1f5f9 文字,对比度满足 WCAG AA,适合长时间阅读。
WCAG(Web Content Accessibility Guidelines)
W3C 发布的无障碍标准,AA 级要求正文对比度 ≥ 4.5:1。

4.3 圆角 / 阴影 / 层级

类别令牌值
圆角--dropdown-radius / -item-radius5px / 4px
圆角--lhk-dialog-radius12px
圆角--media-radius14px
阴影--dropdown-shadow0 10px 26px rgba(15,23,42,.12), 0 2px 8px rgba(15,23,42,.05)
阴影--lhk-dialog-shadow0 25px 50px -12px rgba(15,23,42,.35)
遮罩--lhk-dialog-overlay-bgrgba(15,23,42,.5)
滚动条--site-scrollbar-size6px,滑块 rgba(100,116,139,.55)

z-index 采用「业务分层 + 明确号段」策略,避免弹层互相遮盖:

层级令牌值层
skip-link2000跳到主要内容
--lhk-live-modal-z-index2400实盘弹窗
--lhk-live-popper-z-index2410实盘下拉
--lhk-live-confirm-z-index2500实盘确认框
--lhk-benefit-modal-z-index3200 / 3300权益弹窗及子弹窗
--lhk-chart-learning-drawer-z-index3600图表教学抽屉
--lhk-chart-learning-hint-z-index5200图表提示
--lhk-chart-learning-guide-z-index7000图表引导
--lhk-auth-sheet-z-index11000登录浮层
--lhk-global-message-z-index12000全局消息
--lhk-captcha-overlay-z-index13000验证码浮层

4.4 主题机制

<html lang="en" data-app-theme="dark" data-initial-loading-theme="light">
<script>
  const defaultTheme = 'dark'
  const pathname = window.location.pathname.replace(/\/+$/, '') || '/'
  const adaptiveLoadingTheme =
    pathname === '/' || pathname === '/index' ||
    pathname === '/chart' || pathname.startsWith('/chart/')
  document.documentElement.dataset.initialLoadingTheme =
    adaptiveLoadingTheme ? 'adaptive' : 'light'
  try {
    const storedTheme = window.localStorage.getItem('lhk:app:theme:v2')
    document.documentElement.dataset.appTheme =
      storedTheme === 'light' ? 'light' : defaultTheme
  } catch {
    document.documentElement.dataset.appTheme = defaultTheme
  }
</script>

5. 页面地图与核心页面 UI

路由体系按业务域划分,主要路径如下(meta.title 为浏览器标题):

业务域代表路由标题
营销首页/量化咖|让量化交易更简单
工作台/home、/home/overview、/home/strategyBuildControl Center 系列
超级图表/chart、/chart/:chartId超级图表
策略/strategy、/strategy/detail/:id、/strategyBuild/*策略广场 / 策略构建器
数据中心/data-center、/data-center/module/:moduleKeyQuant Data Center
内容学习/library、/school、/solution、/article/:type知识文库 / 新手学院 / 解决方案
商业化/vip、/payment/cryptoVIP Membership
账户/home/securityPreference、/space/:userIdSecurity Center / User Space
管理后台/systemAdmin、/systemUserList、/systemLiveMonitorAdmin Console 系列
移动端/mobile手机端

5.1 营销落地页(/)

Hero(首屏主视觉区)
落地页第一屏的标题、导语与主行动按钮区域,承担核心信息传达与转化。
Backdrop Filter(背景滤镜)
对元素背后的内容做模糊/饱和度处理,实现「毛玻璃」效果。需注意浏览器兼容与性能。

5.4 超级图表工作台(/chart)

5.5 策略广场与策略构建

5.6 数据中心(/data-center)

5.7 会员与支付

5.8 账户中心与管理后台

5.9 移动端(/mobile)

6. 组件与交互规范

组件关键令牌 / 类规范
弹窗 Dialog--lhk-dialog-*圆角 12px,标题 18px / 600 / #1e293b,正文 #334155,遮罩 rgba(15,23,42,.5),含进度计与 footer 左右分布
消息 MessageBoxlhk-modern-message-box统一 --app-message-*,亮/暗两套,四态语义色
下拉 Dropdown--dropdown-*5px 圆角,选项高 32px,hover #f6f7f9,激活即选中蓝底
表格 DataTable.lhk-table基于 el-table,表头底 #f8fafc
按钮 Button.el-button--*六态(default/primary/success/warning/danger/info)+ plain/text/link
会员徽章membership-badge多套渐变 + 图标
控制台胶囊console-pill后台顶部标记样式
加载层html-initial-loading / route-loadingLogo clip-path 填充动画 1.6s
交互一致性原则:所有浮层必须在既定 z-index 号段内(见 4.3),所有悬停/激活色必须走令牌,所有数值文本必须用等宽字体族。

7. 响应式与主题

Breakpoint(断点)
响应式设计中触发布局切换的视口宽度阈值。
Focus-visible
仅在键盘聚焦时显示焦点轮廓的 CSS 伪类,兼顾可达性与鼠标体验。

8. 实战速查手册

8.1 Design Token 速查

用途变量值
品牌主色--primary-color#2446a3
强调蓝--app-accent-blue#2563eb
暗色底--route-loading-bg#0d0f12
头部高--public-header-height60px
正文字体--site-font-familyInter, PingFang SC...
数字字体--site-number-font-familyJetBrains Mono...

8.2 路由 / 层级 / 断点速查

问题答案
主题存在哪?localStorage['lhk:app:theme:v2'](仅 light 特殊,其余为 dark)
图表页是否显示头尾?否,meta.isHideHeader/isHideFooter = true
全局消息最高层级?--lhk-global-message-z-index: 12000
验证码浮层?--lhk-captcha-overlay-z-index: 13000
响应式断点?约 960px / 640px

8.3 逆向复刻操作手册

  1. 取外壳:curl -s https://lhk.ai,读取内联主题脚本与资源清单。
  2. 取令牌:抓取 /assets/css/index.*.css,用 grep 提取 :root{...} 与 --* 变量,即为完整 Design Token。
  3. 取路由:抓取 /assets/js/index.*.js,搜索 path:"/" 与 name:"...",还原路由表与 meta 标题。
  4. 取文案:搜索 "xxx.key":"中文" 键值对,得到全部 i18n 文案。
  5. 取落地页:定位 LandingHome.*.js/.css,得到营销层独立令牌与 Hero 规格。
# 一键提取主题令牌
curl -s https://lhk.ai/assets/css/index.JcVxZNbQ.css \
  | grep -oE '\-\-[a-z0-9-]+: [^;}]+' | sort -u

# 提取路由
curl -s https://lhk.ai/assets/js/index.DVIthQbW.js \
  | grep -oE 'path:"[^"]+",name:"[^"]+"' | sort -u
注意:线上文件名带内容哈希(如 index.DVIthQbW.css),版本更新后会变化;复刻时应以 index.html 中引用的实际文件名为准,不要把哈希写死。